﻿// 队列.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//队列
#define SIZE 20
struct Q
{
    int q[SIZE];
    int f;
    int r;
};

// 队列初始化
void Init(Q* q)
{
    q->f = 0;
    q->r = 0;

}
// 队尾入队
void Push(Q* q, int val)
{
    if (q->f == (q->r + 1) % SIZE)
    {
        printf("队列已满");
        exit(-1);
    }
    else
    {

        q->q[q->r] = val;
        q->r = (q->r + 1) % SIZE;
    }


}
// 队头出队
void Pop(Q* q)
{
    q->f = (q->f + 1) % SIZE;
}
// 获取队头元素
int Front(Q* q)
{
    return q->q[q->f];
}
// 队空
bool Empty(Q* q)
{
    return (q->f == q->r);   //关系运算符运算下来本身就是true/false，返回它就好
}
// 队满
bool Full(Q* q)
{
    return(q->f == (q->r + 1) % SIZE);   //关系运算符运算下来本身就是true/false，返回它就好
}
int main()
{
    Q q;
    Init(&q);
    Push(&q, 20);
    Push(&q, 23);
    Push(&q, 25);
    Push(&q, 28);
    Push(&q, 98);
    Push(&q, 60);
    while (!Empty(&q))
    {

        printf("%d ", Front(&q));
        Pop(&q);
    }
}
